package com.c2b.algorithm.leetcode.hot100;

/**
 * 盛最多水的容器
 *
 * @author c2b
 * @since 2022/4/29 16:31
 */
public class Hot011MaxArea {

    private Hot011MaxArea() {
    }

    /**
     * 给定一个长度为 n 的整数数组height。有 n 条垂线，第  i条线的两个端点是(i, 0)和(i, height[i])。
     * <p>找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。
     * <p>返回容器可以储存的最大水量。
     * <p>------------------------
     * <p>输入：[1,8,6,2,5,4,8,3,7]
     * <p>输出：49
     * <p>------------------------
     * <p>双指针：由于容纳的水量是由 两个指针指向的数字中较小值 * 指针之间的距离 决定的。
     * <p>指针间的距离在不断缩小，所以尽可能使 两个指针指向的数字中较小值 大    ==>较小值指针移动
     *
     * @param height 整数数组
     * @return 容纳的更多的水
     * @author c2b
     * @since 2022/4/29 16:32
     */
    public static int maxArea(int[] height) {
        if (null == height || height.length < 2) {
            // 不符合题意
            return -1;
        }
        int leftIndex = 0;
        int rightIndex = height.length - 1;
        int maxArea = 0;
        while (leftIndex < rightIndex) {
            maxArea = Math.max(maxArea, Math.min(height[leftIndex], height[rightIndex]) * (rightIndex - leftIndex));
            if (height[leftIndex] <= height[rightIndex]) {
                leftIndex++;
            } else {
                rightIndex--;
            }
        }
        return maxArea;
    }
}
